在操作数据库时,对数据的修改是需要有足够的安全措施的,其实在实际工作中,我们用db.collections.update的时候不多,在修改时我们都会用findAndModify,它可以给我们返回来一些必要的参数,让我们对修改多了很多控制力,控制力的加强也就是对安全的强化能力加强了。
应答时写入
我们之前所学习的都是非应答式的,就是再操作完数据之后,并没有任何回应和返回值。
应答式
写入就会给我们返回结果,结果里面包含的项目很多,这样我们就能更好的进行程序的控制和安全机制的处理。
db.runCommand()
他是数据库运行命令的执行器,执行命令首先就要使用它,因为它在Shell和驱动程序间提供了一致的接口。
db.workmate.update({sex:1},{$set:{money:1000}},false,true)
// false意思是,如果有这个属性就修改,如果没有就不修改,(因为我们要修改的只是)
// true 意思是,如果是true,表示对所有查询结果都做修改
var resultMessage=db.runCommand({getLastError:1}) // 执行完数据库操作后会返回一个对象
// getLastError:1 :表示会返回功能错误
// printjson:表示以json对象的格式输出到控制台。
printjson(resultMessage);// 以json的形式输出
上边的代码,我们修改了所有男士的数据,每个人增加了1000元钱(money),然后用db.runCommand()执行,可以看到执行结果在控制台返回了。如下:
{
"connectionId" : 1,
"updatedExisting" : true, // 这个有用
"n" : 2,
"syncMillis" : 0,
"writtenTo" : null,
"err" : null,
"ok" : 1
}
// runCommand()的另外一个用法
// 命令行中使用该命令查看数据库是否连接成功
> use login
switched to db login
> db.runCommand({ping: 1});
{ "ok" : 1 }
// 返回{ "ok" : 1 }表示数据库连接成功!!
findAndModify
findAndModify是查找并修改的意思。配置它可以在修改后给我们返回修改的结果。
//
var myModify={
findAndModify:"workmate", // 哪个集合
query:{name:'JSPang'}, // 查询条件
update:{$set:{age:18}}, // 修改操作
new:true //更新完成,需要查看结果,如果为false不进行查看结果
}
var ResultMessage=db.runCommand(myModify);
printjson(ResultMessage)
// findAndModify的性能是没有直接使用db.collections.update的性能好,但是在实际工作中都是使用它,毕竟要商用的程序安全性还是比较重要的。
findAndModify属性值:
query是查询选择器,与findOne的查询选择器相同
update是要更新的值,不能与remove同时出现
remove表示删除符合query条件的文档,不能与update同时出现
new为true:返回个性后的文档,false:返回个性前的,默认是false
sort:排序条件,与sort函数的参数一致。
fields:投影操作,与find*的第二个参数一致。
upsert:与update的upsert参数一样。
例如:
db.mongo_book.findAndModify({query:{"code":15409639},
update:{ $set : { catalogStatus : 3}} ,
new:true,
});
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。